OpenFOAMをGraviton2(Arm)インスタンスで動かして計算する
世間はApple M1(Arm)プロセッサで賑わってますね。新進気鋭なCPUに興味があるのですが手元にはありません。 職業柄AWSはいじれるのでAWSが設計開発したGraviton2(Arm)プロセッサで遊んでみます。 OpenFOAMをGrabiton2インスタンスで動かせるかやってみます。最終的にクラウドHPC環境の演算ノードでGraviton2を利用するための検証です。
- OpenFOAM v20 06をGrabiton2(Arm)インスタンスへインストール方法を紹介
OpenFOAMとは
オープンソースの流体解析ツールです。このバイクの画像でおなじみ。こちらはre:Inventの資料です。Intelのc5n.18xlarge(vCPU:72)をHyper-Threading無効で16台とEFA使って演算したようです。
検証環境
OS | Ubuntu 20.04 LTS |
---|---|
OpenFOAM | v20 06 |
Architecture | Arm(Graviton2) |
AMI | ubuntu-focal-20.04-arm64-server-20201026 |
InstanceType | c6g.16xlarge(vCPU:64 Mem:128) |
OpenFOAMのインストール
ソースからビルドすればArmでもx86と同じように動くということだけはわかりました。これしか情報はないので当たって砕けろの精神ではじめます。
No source code modifications are required to obtain a working OpenFOAM binary. The process for building OpenFOAM on Arm based systems is equivalent to that on x86 systems, by specifying the desired compiler in OpenFOAM bashrc file.
インストール手順
2020年6月リリースのバージョンを使用します。インストール手順は公式ドキュメントを参考に進めます。
OpenFOAM® Installation From Source
必要なライブラリをインストールします。
sudo apt-get update sudo apt-get install build-essential autoconf autotools-dev cmake gawk gnuplot -y sudo apt-get install flex libfl-dev libreadline-dev zlib1g-dev openmpi-bin libopenmpi-dev mpi-default-bin mpi-default-dev -y sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev -y sudo apt-get install libscotch-dev libptscotch-dev libfftw3-dev libboost-system-dev libboost-thread-dev libcgal-dev -y
必要なソースコードをダウンロード。
cd /tmp wget https://sourceforge.net/projects/openfoam/files/v2006/OpenFOAM-v2006.tgz wget https://sourceforge.net/projects/openfoam/files/v2006/ThirdParty-v2006.tgz
ホームディレクトリ直下にOpenFOAM
ディレクトリが作成され、ダウンロードしたファイルが展開されます。
mkdir $HOME/OpenFOAM && tar -xzf OpenFOAM-v2006.tgz -C $HOME/OpenFOAM && tar -xzf ThirdParty-v2006.tgz -C $HOME/OpenFOAM
OpenFOAMの環境設定ファイルを読み込みます。
$ source ~/OpenFOAM/OpenFOAM-v2006/etc/bashrc No completions for /home/ubuntu/OpenFOAM/OpenFOAM-v2006/platforms/linuxARM64GccDPInt32Opt/bin [ignore if OpenFOAM is not yet compiled]
foam
コマンドでOpenFOAMのディレクトリ移動できたらOKです。
foam
結果
$ pwd /home/ubuntu/OpenFOAM/OpenFOAM-v2006
Allwmake
コマンドでコンパイルします。マシンスペックによりますが数時間はかかります。
オプション | 説明 |
---|---|
-j | 有効なすべてのCPUを利用 |
-s | メッセージ出力を抑える |
-l | teeアウトプット(標準出力とログファイルに出力) |
./Allwmake -j -s -l
コンパイルが完了時の最後の標準出力内容
省略 2020-11-22 09:11:03 +0000 ======================================== OpenFOAM-v2006 Gcc system compiler linuxARM64GccDPInt32Opt, with SYSTEMOPENMPI openmpi-system api = 2006 patch = 0 bin = 308 entries lib = 157 entries ======================================== Done logging to 'log.linuxARM64GccDPInt32Opt'
c6g.16xlarge(vCPU:64)でコンパイル完了までに1時間かかりました。ちなみにCPUは全然有効に使い切れてなかった様子でマックスでも33%の使用率。
気になったのでc6g.large(vCPU:2)でも試した結果は2時間半かかりました。
インストールテストコマンドで結果確認します。
foamInstallationTest
ok
表示なら成功です。
Summary ------------------------------------------------------------------------------- Base configuration ok. Critical systems ok.
テスト実行
pitzDailyのチュートリアルをコピーしてテストします。
mkdir ~/test_run cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily ~/test_run cd ~/test_run/pitzDaily
六面体構造格子を生成。
blockMesh
実行結果
省略 ---------------- Mesh Information ---------------- boundingBox: (-0.0206 -0.0254 -0.0005) (0.29 0.0254 0.0005) nPoints: 25012 nCells: 12225 nFaces: 49180 nInternalFaces: 24170 ---------------- Patches ---------------- patch 0 (start: 24170 size: 30) name: inlet patch 1 (start: 24200 size: 57) name: outlet patch 2 (start: 24257 size: 223) name: upperWall patch 3 (start: 24480 size: 250) name: lowerWall patch 4 (start: 24730 size: 24450) name: frontAndBack End
simpleFoamで演算を実行します。
simpleFoam は SIMPLE 法を用いた非圧縮性流体の定常乱流解析ソルバーです。
simpleFoam
実行結果
省略 SIMPLE solution converged in 279 iterations streamLine streamlines write: seeded 10 particles Tracks:10 Total samples:10885 Writing data to "/home/ubuntu/test_run/pitzDaily/postProcessing/sets/streamlines/279" End
簡単なチュートリアルだったので秒で結果が返ってきました。
演算結果の可視化
計算結果をローカルに落としてParaViewで可視化しました。画像の左から風が流れ右から抜けていきます。物体内での風の流れを白い矢印で表示しています。画像が小さく分かりづらいのですが、実際は3Dのモデルをグリグリ動かせるのでもっと確認しやすいです。ともあれGraviton2でOpenFOAMを動かし演算することに成功しました。
おわりに
Graviton2(Arm)でもソースからビルドすれば問題なくOpenFOAMは動きました。ParaViewの可視化でいい感じに表現できなかったのが残念なのですが...センス不足で時間が溶けていきました。なにかのシュミレーションを勉強のため動かしたいならOpenFOAMのチュートリアルがおすすめです。可視化してグリグリ動かしているとすごいやった感を得られます。
以上、網走の大村でした。
参考
How to Install OpenFOAM v2006 from Source Pack - CEMF.ir
PENGUINITIS - OpenFOAM v1912 を Ubuntu 16.04 LTS にインストールメモ
PENGUINITIS - blockMesh によるメッシュの作成
OpenFOAMLectureCourseSeries2010-5.key
openfoam · Wiki · Arm HPC Users Group / packages · GitLab